// 不定参宏函数的使用

// #include <stdio.h>
// #define LOG(fmt, ...) printf("[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__);
// int main()
// {
// 	//编译器内置的宏:__FILE__当前文件名;__LINE__当前行号。
// 	LOG("Anduin\n");
// 	return 0;
// }

/*
C中不定参函数的使用
*/
// #define _GNU_SOURCE//使用vasprintf函数必须带这个宏
// #include <stdio.h>
// #include <stdarg.h>
// #include <stdlib.h>
// //参数类型一样
// void printNum(int n, ...)
// {
//     va_list al; // 可变参数列表
//     va_start(al, n); // 获取n参数之后的第一个不定参数的地址
//     for (int i = 0; i < n; i++)
//     {
//         int num = va_arg(al, int); // 从可变参数列表中获取⼀个整形参数
//         printf("param[%d]:%d\n", i, num);
//     }
//     va_end(al); // 将al置空
// }
// //参数类型不一样 -- 模拟一下 printf 的实现
// void myprintf(const char* fmt,...)
// {
//     va_list ap;
//     va_start(ap,fmt);
//     char *res;
//     //对不定参数的基本使用；給一个一级指针的地址(&res)进去，根据fmt里面的字符串格式，一个一个的取出可变参数列表的每个数。
//     int ret=vasprintf(&res,fmt,ap);
//     if(ret!=-1)
//     {
//         printf(res);
//         free(res);
//     }
//     va_end(ap);//将ap指针置空
// }
// int main()
// {
//     printNum(3, 11, 22,33);
//     printNum(5, 44, 55, 66, 77, 88);
// 	   myprintf("%s %d\n","Anduin",521);
//     return 0;
// }